我們接下來就把完全不同的SHA3講完吧。
這部份其實難度也還好,而且發布的標準文檔也寫得很清楚就是了。
但還是很有趣的,我們就一步一步來看吧。
我們還是搭配論文一起來分析。
SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions
接下來我們所使用的圖片都是來自2015年所發布的,SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions 文檔,在此標記。
我接下來不會以論文的順序(你們應該都知道吧,其實我都不是以論文的順序在寫)。
論文中的程式是先準備完所有的Function,才開始處理其他的。
那我們照著資料處理流程來寫。
這邊要先把資料作分塊。
SHA3 是以5*5的資料塊陣列下去做的。
假設資料為S,並把資料排成一列從0開始到資料長度n。
則資料有S[0]~S[n-1]。
w為資料每一個資料塊的長度,w的總量是會變動的,w的計算為b/25。
而b是由25、50、100、200、400、800、1600挑出來的。
也就是說SHA3最多25塊資料塊,每塊的資料則是變動的,由上述數值決定。
因此可以做成一個3維的樣子,以公式寫成:
A[x,y,z] = S[w*(5y+x)+z]
x跟y表示資料塊因此:x<=5、y<=5。
z則是:z<=w-1。
我們可以看一下圖一跟圖二,這樣比較清楚:
圖一
圖二
資料因為有可能很長很長,因此必須使用海綿函式。
海綿函式將會使資料變成固定的長度。
我們看一下圖三
圖三
這就是海綿函式的整個流程,輸出固定長度。
好,我們先來看一下SHA3的海綿函式的流程圖(圖四)。
圖四
這邊說一下代號:
還有一個很重要的東西「pad」,我們先介紹它:
一樣先看流程,圖五:
圖五
照著公式做,第二個步驟其實是:'1' 串連 j個'0' 再串連 '1'。
我們繼續接著講『海綿函數』回去看『圖四』。
我們這樣就把『資料』變成了『SHA3 Hash』了。
那我們的核心是在『f』身上。
那我們來說說f。
上面的f函數就是SHA3的KECCAK-f。
其實KECCAK-f 是從 KECCAK-p[b, 12+2l]來的。
那b跟l是什麼,一樣看圖六:
圖六
b為想要處理的資料長度,而這個可以從25、50、100、200、400、800、1600挑出來,由開發者決定。
再看圖六,從選定的b選擇l。
那我們要看KECCAK-p了。
我們先看圖七。
圖七
那我們看到了一個Red的函數,那Red函數是什麼?看圖八。
圖八
看來有5個函數,θ、ρ、π、χ、ι。
那就表示我們必須把資料塊A放入5個函數裡做計算。
我們一個一個介紹,我們由內向外介紹。
我們先看流程,圖九:
圖九
公式化應該不難。
這邊有演示圖(圖十):
圖十
我們先看流程,圖十一:
圖十一
這邊的公式化也不難吧。
這邊有演示(圖十二):
圖十二
我們先看流程,圖十三:
圖十三
這邊也簡單,但很有意思。
這邊有演示(圖十四):
圖十四
我們先看流程,圖十五:
圖十五
這邊看演示圖才比較清楚在做什麼,請往下看。
這邊有演示(圖十六):
圖十六
我們先看流程,圖十七:
圖十七
這邊有一個rc函數請看下面:
我們看rc流程,圖十八:
圖十八
如圖十九:
圖十九
這邊的448、512、768、1024是c,c就是f回傳的資料長度(b)減掉速率(r)。
用這邊的c並選定b之後就能回推r了,這樣就能做『海綿函數』了。
然後()裡面的是,資料串接一個01與要的長度d。
那圖二十,這邊是可以自由選擇出長度的。
圖二十
這邊的128跟256是c就是f回傳的資料長度(b)減掉速率(r),也就是說固定了r,也就是固定速度。
終於……我們把SHA3講完了。
SHA3的文檔雖然寫得很完整了,但因為它的流程是先準備好要用的Function。
讀起來有點累,同時除了SHA3的文檔,有些部分還要參考一下虛擬碼。
但有了這樣的介紹,應該大家也能把程式寫出來吧~
那麼,明天開始就來說說下一個特別的Hash,CRC的部分。
這個Hash是作快速的校驗跟修復用的。
而且簡單的CRC原理其實很簡單的。
那就留到明天來說吧~大家明天見~
SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions
太專業啦~ 開始拜讀論文了
要等有空好好花時間看完你的系列文!
感謝大神的留言~
但越寫到系列的後面,就越來越水是真的……
抱歉QAQ